আর প্রোগ্রামিংয়ে foreach এবং parallel প্যাকেজ দুটি গুরুত্বপূর্ণ টুল, যা মাল্টি-কোর প্রসেসিং (multi-core processing) এবং প্যারালাল কম্পিউটিং (parallel computing) এর মাধ্যমে কোডের কার্যকারিতা দ্রুততর করতে সাহায্য করে। এগুলি সাধারণত বড় ডেটাসেট বা গণনা-intensive কাজের জন্য ব্যবহৃত হয়, যেখানে একাধিক কাজকে একযোগে চালানো প্রয়োজন হয়। এই প্যাকেজগুলির মাধ্যমে, আপনি লুপ বা সিকোয়েনশিয়াল প্রসেসিংয়ের পরিবর্তে প্যারালাল প্রসেসিং ব্যবহার করে কাজের গতি বাড়াতে পারেন।
১. foreach প্যাকেজ
foreach প্যাকেজটি একটি R প্যাকেজ যা মাল্টি-থ্রেডেড বা প্যারালাল কাজ করার জন্য ব্যবহৃত হয়। এটি পুনরাবৃত্তি (looping) কাঠামোকে একাধিক প্রসেসে বিভক্ত করে এবং প্যারালালভাবে কার্যকরভাবে পরিচালনা করে। foreach সাধারণত লুপের মধ্যে একাধিক কাজ চালানোর জন্য ব্যবহার হয়, যেখানে প্রতিটি কাজ স্বাধীনভাবে চলতে পারে।
Installation:
install.packages("foreach")
Syntax:
foreach(i = 1:n) %dopar% {
# Parallel code block
}
%dopar%হল প্যারালাল প্রসেসিং অপারেটর। যদি আপনি সিকোয়েনশিয়াল প্রসেসিং করতে চান, তবে%do%ব্যবহার করতে হবে।
উদাহরণ:
# foreach প্যাকেজ এবং doParallel প্যাকেজ লোড করা
library(foreach)
library(doParallel)
# প্যারালাল ক্লাস্টার তৈরি করা
cl <- makeCluster(4) # ৪টি কোরের ক্লাস্টার
registerDoParallel(cl)
# foreach ব্যবহার করে প্যারালাল লুপ চালানো
results <- foreach(i = 1:10) %dopar% {
Sys.sleep(1) # 1 সেকেন্ডের বিলম্ব
i^2 # i এর বর্গ বের করা
}
print(results)
# ক্লাস্টার বন্ধ করা
stopCluster(cl)
এখানে, foreach() ফাংশনটি ১ থেকে ১০ পর্যন্ত মানের জন্য একসাথে কাজ করতে সক্ষম হয়, এবং %dopar% দ্বারা প্যারালাল প্রসেসিং চালানো হয়। makeCluster(4) মাধ্যমে ৪টি কোরের ক্লাস্টার তৈরি করা হয় এবং কাজটি সেগুলোর মধ্যে ভাগ হয়ে যায়।
২. parallel প্যাকেজ
parallel প্যাকেজটি R-এর একটি অন্তর্নিহিত প্যাকেজ, যা মাল্টি-কোর প্রসেসিং এবং প্যারালাল কম্পিউটিং সুবিধা প্রদান করে। এই প্যাকেজটি মূলত একই কাজকে একাধিক কোরে ভাগ করে এবং ফলস্বরূপ গতি বৃদ্ধি করে।
Installation:
install.packages("parallel")
Syntax:
mclapply(X, FUN, ..., mc.cores = 2)
- X: লিস্ট বা ভেক্টর যার উপাদানগুলোর উপর ফাংশন প্রয়োগ করা হবে।
- FUN: ফাংশন যা
Xএর উপর প্রয়োগ করা হবে। - mc.cores: কতটি কোর ব্যবহার করা হবে তা নির্ধারণ করে (ডিফল্ট ১)।
উদাহরণ:
# parallel প্যাকেজ লোড করা
library(parallel)
# ১ থেকে ১০ পর্যন্ত ভেক্টরের উপর প্যারালাল লুপ চালানো
results <- mclapply(1:10, function(i) {
Sys.sleep(1) # 1 সেকেন্ডের বিলম্ব
i^2 # i এর বর্গ বের করা
}, mc.cores = 4) # ৪টি কোর ব্যবহার করা
print(results)
এখানে, mclapply() ফাংশনটি ১ থেকে ১০ পর্যন্ত ভেক্টরের উপর কাজ চালাচ্ছে, এবং mc.cores = 4 দ্বারা ৪টি কোর ব্যবহার করা হচ্ছে। এটি একসাথে ৪টি কাজ চালায়, ফলে গতি বৃদ্ধি পায়।
foreach এবং parallel এর মধ্যে পার্থক্য
| ফিচার | foreach | parallel |
|---|---|---|
| লুপ অপারেটর | %dopar% (প্যারালাল লুপ) অথবা %do% (সিকোয়েনশিয়াল লুপ) | mclapply(), parLapply(), clusterApply(), ইত্যাদি |
| প্রসেসিং | প্যারালাল প্রসেসিং ব্যবহার করে | মাল্টি-কোর প্রসেসিং এর জন্য ব্যবহৃত |
| ক্লাস্টার তৈরি | doParallel প্যাকেজ ব্যবহার করে ক্লাস্টার তৈরি করা হয় | ক্লাস্টার ব্যবস্থাপনা makeCluster() ফাংশনের মাধ্যমে |
| আউটপুট ফরম্যাট | লিস্ট আউটপুট | লিস্ট বা ভেক্টর আউটপুট |
| ব্যবহার | সাধারণত foreach ব্যবহার করা হয় একাধিক কাজের জন্য | parallel প্যাকেজে নানা ধরনের ফাংশন এবং কোর সংখ্যা কনফিগার করা হয় |
সারাংশ
foreach এবং parallel প্যাকেজ দুটি মাল্টি-কোর প্রসেসিং এবং প্যারালাল কম্পিউটিংয়ের জন্য গুরুত্বপূর্ণ সরঞ্জাম। foreach প্যাকেজটি সাধারণত একটি লুপের মধ্যে প্যারালাল প্রসেসিং ব্যবহারের জন্য ব্যবহৃত হয়, যেখানে parallel প্যাকেজটি মূলত একাধিক কোরে ডেটা প্রসেস করার জন্য ব্যবহৃত হয়, এবং এর ফলে কম সময়ের মধ্যে বেশি কাজ করা সম্ভব হয়। এই দুটি প্যাকেজই ডেটা সায়েন্স এবং পরিসংখ্যান বিশ্লেষণের ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more